package network

type ReceBuffer struct{
	buffer 		[]byte
	begin 		int16
	end			int16
	max_size	int16
}

// 创建一个缓冲区
func NewReceBuffer(size int16)(b *ReceBuffer){
	return &ReceBuffer{make([]byte, size), 0, 0, size}
}

// 获取缓冲区的可用部分
func (b *ReceBuffer) Space()(bytes []byte){
	if b.end == b.max_size{
		b.Reset()
	}

	return b.buffer[b.end:b.max_size]
}

// 重置缓冲区，把当前数据移动到开头
func (b* ReceBuffer) Reset() {
	copy(b.buffer, b.buffer[b.begin:b.end])
	b.begin, b.end = 0, b.end - b.begin
	return
}

// 记录放入数据大小
func (b *ReceBuffer) Put(size int16) {
	if b.end + size < b.max_size {
		b.end += size
	}else{
		b.end = b.max_size
	}
}

// 从缓冲区读取一整个协议，如果数据不够返回nil
func (b* ReceBuffer) Take()(bytes []byte) {
	if b.end - b.begin < 2 {
		return nil
	}

	size := int16(b.buffer[b.begin]) | int16(b.buffer[b.begin+1]<<8)
	if b.end - b.begin < size+2 {
		return nil
	}

	bytes = b.buffer[b.begin:b.begin+size+2]
	b.begin += (size+2)
	return
}

